Mart 2008, rešeni rok iz predmeta "Baze podataka"


fajlovi prikačeni uz rok.

U arhivi se nalaze: XML schema (.xsd), XML dokument (.xml), XQuery upit ili XPath putanja (.xq), SQl dump baze (.sql), visio 2003 dijagram (.vsd) ukoliko postoje takvi fajlovi vezani za zadatke.

XML: za sve fajlove je provereno da li su dobro oformljeni, a ako postoji i xml fajl i schema, xml fajl je validiran u odnosu na odgovarajuću šemu. Za kreiranje fajlova, proveru forme, validaciju, XPath i XQuery izraze korišćen je XML editor EditX http://www.editix.com/

SQL: baza je napravljena u MySQL-u pa prema tome SQL kod može imati netipičnu sintaksu ili funkcije različite od onih u knjizi. Upiti su provereni, prema mom shvatanju zadataka, koji često nisu baš lako shvatljivi. Najlakše je preko MySQLyog-a uraditi "restore from SQL dump" da bi mogli da probate upite nad podacima. Alati: MySQL http://www.mysql.com, MySQOyog www.webyog.com


1. zadatak

relacija:

Evrovizija (Izvodjač, ŠifraDržaveOcenjivača, BrojPoena, NazivPesme, NazivDržaveOcenjivača, ŠifraJezika, NazivJezika)

funkcionalne zavisnosti:

Izvodjač, ŠifraDržaveOcenjivača --> BrojPoena, NazivPesme, NazivDržaveOcenjivača, ŠifraJezika, NazivJezika
ŠifraDržaveOcenjivača --> NazivDržaveOcenjivača
Izvodjač --> NazivPesme, ŠifraJezika, NazivJezika
ŠifraJezika --> NazivJezika

definicije:

fukcionalna zavisnost:

u relaciji R atribut R.B (R.A i R.B mogu biti složeni) funkcionalno zavisi od atributa R.A (R.A funkcionalno određuje R.B) ako za svaku vrednost R.A postoji jedna i samo jedna vrednost R.B

potpuna funkcionalna zavisnost:

atribut R.B potpuno funkcionalno zavisi od atributa R.A ako funkcionalno zavisi od atributa R.A ali ne i od nekog pravog podskupa atributa R.A

determinanta:

determinanta je bilo koji prost ili slozen atribut od koga neki drugi atribut u relaciji potpuno funkcionalno zavisi.

determinante:

Izvodjač, ŠifraDržaveOcenjivača --> BrojPoena(D)(KK)
Izvodjač --> NazivPesme, ŠifraJezika, NazivJezika(D)
ŠifraDržaveOcenjivača --> NazivDržaveOcenjivača(D)
ŠifraJezika --> NazivJezika(D)

relacija se svodi na BCNF dekompozicijom kojom se iz relacije izvlače projekcije sa onim determinantama koje nisu kandidati za ključ

Pesma (Izvodjač, NazivPesme, ŠifraJezika)
Ocena (Izvodjač, ŠifraDržaveOcenjivača, BrojPoena)
DržavaOcenjivač (ŠifraDržaveOcenjivača, NazivDržaveOcenjivača)
Jezik (ŠifraJezika, NazivJezika)

u ovim relacijama sve determinante su kandidati za ključ tako da su relacije u Boyce-Codd normalnoj formi.


2. zadatak

a)

A (A1#, A2)

B (B1#, B2, A1#)

AB2 (A1#, B1#)

C (A1#,C1#, C2)

D (A1#, D1)

E (A1#, E1)

F (A1#, F1)

G (A1#, G1)

CG1 (A1#, A1#, G1)

H (A1#,A1#, H1)

b)

class A (extent As key A1#){

	attribute string A1#;
	attribute string A2;
	relationship B AB1 inverse B :: BA1;
	relationship set<Bgtt; AB2 inverse B :: BA2;

};

class C extends A{

	attribute string C1#;
	attribute string C2;
	relationship set<G> CG1 inverse G :: GC1;
    
};

class D extends A{

	attribute string D1;
	relationship set<Ggtt; DG inverse G :: GD;

};

class G (key G1) {

	attribute string G1;
    relationship D GD inverse D :: DG;
	relationship set<Cgtt; GC1 inverse C :: CG1;

};

class E extends C {

	attribute string E1;
	relationship H EH inverse H :: HE;

};

3. zadatak


4. zadatak

Složeni konstruisani tipovi u objektno-relacionom bp su tip vrsta i tip kolekcija.


5. zadatak

a)

Graf prethođenja tranaskcija se sastoji od čvorova koji predstavljaju transakcije i usmerenih grana koje prikazuju prethođenje transakcija. Kaže se da Transakcija Ti prethodi transakciji Tj u izvršenju S ako postoji operacija Oi transakcije Ti i operacija Oj transakcije Tj tako da je:

  1. Oi prethodi Oj u S
  2. I Oi i Oj se odnose na isti element baze podataka
  3. Barem jedna od operacija Oi i Oj je upisivanje
Ako postoji ciklus u grafu tada izvršenje nije moguće učiniti serijabilnim (nije konflikt-serijabilno)

b)

S1

T2 prethodi T3 (operacije 3 i 6) T2 prethodi T1 (operacije 2 i 5) T1 prethodi T3 (operacije 5 i 8)
graf prethođenja:

Pošto na grafu nema ciklusa izvršenje jeste konflikt serijabilno!

S2

T2 prethodi T3 (operacije 1 i 6) T3 prethodi T2 (operacije 6 i 8, već ovde je jasno da izvršenje nije konflikt serijabilno) T2 prethodi T1 (operacije 2 i 4) T1 prethodi T3 (operacije 4 i 7)
graf prethođenja:

Pošto na grafu ima ciklusa izvršenje nije konflikt serijabilno!


6. zadatak

a)

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Model">
        <xs:complexType>
            <xs:sequence>
                <xs:element  name="Predmet" type="PredmetType" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
        <xs:unique name="jedinstveniBrojPredmeta">
            <xs:selector xpath=".//Predmet"/>
            <xs:field xpath="@BrojPredmeta"/>
        </xs:unique>
    </xs:element>
    <xs:complexType name="PredmetType">
        <xs:sequence>
            <xs:element name="Akt" type="AktType" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="BrojPredmeta" type="xs:int" use="required"/>
        <xs:attribute name="Opis" type="xs:string"/>
    </xs:complexType>
    <xs:complexType name="AktType">
        <xs:attribute name="RBAkta" type="xs:ID" use="required"/>
        <xs:attribute name="DatumPodnosenja" type="xs:date"/>
        <xs:attribute name="KratakOpis" type="xs:string"/>
    </xs:complexType>
</xs:schema>

b)

<?xml version="1.0" encoding="utf-8"?>
<Model
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="file:///D:/My%20FON/IV%20godina/I%20semestar/Baze%20podataka/BProkovi2008/maj2008/podA.xsd">
	<Predmet BrojPredmeta="1" Opis="neki opis">
		<Akt RBAkta="A11" DatumPodnosenja="2008-01-01" KratakOpis="neki kratak opis"/>
		<Akt RBAkta="A12" DatumPodnosenja="2008-01-01" KratakOpis="neki kratak opis"/>
	</Predmet>
	
	<Predmet BrojPredmeta="2" Opis="neki opis">
		<Akt RBAkta="A21" DatumPodnosenja="2008-01-01" KratakOpis="neki kratak opis"/>
		<Akt RBAkta="A22" DatumPodnosenja="2008-01-01" KratakOpis="neki kratak opis"/>
	</Predmet>
</Model>

c)

<xs:unique name="jedinstveniBrojPredmeta">
	<xs:selector xpath=".//Predmet"/>
    <xs:field xpath="@BrojPredmeta"/>
</xs:unique>

7. zadatak

a)

select 
	Naslov, ImePrezime, Cena, case when SajamskiPopust=0 then Cena else Cena*SajamskiPopust end as CenaSaPopustom, Naziv, BrojHale
from
	ALBUM join PRODUKCIJSKA_KUCA using(SifProdukcije) join KOMPONOVAO using(SifAlbuma) join KOMPOZITOR using(SifKompozitora)
where
	SajamskiPopust = 0.0 or DatumOdobravanjaPopusta >= current_date

b)

select
	Naslov
from
	ALBUM join DNEVNA_PRODAJA using(SifAlbuma)
where
	(Datum, BrojPrimeraka)
in
(select 
	Datum, min(BrojPrimeraka)
from
	DNEVNA_PRODAJA
group by
	Datum
having
	min(BrojPrimeraka) = (	select
					max(najmanjaDnevnaProdaja)
				from
					(select 
						Datum, min(BrojPrimeraka) as najmanjaDnevnaProdaja
					from
						DNEVNA_PRODAJA
					group by
						Datum)as unutrasnja))

c)

create view ALBUMI_NA_POPUSTU (NazivProdukcijskeKuce, NazivPravca, UkBrProdPrimerakaBezPopusta, UkBrojProdPrimSaPopustom, UkPrihodOdProdaje, UkOdobrenPopust, ProsecanIznosPopusta) as
select
	PRODUKCIJSKA_KUCA.Naziv,
	NazivPravca,
	sum(case when Datum<DatumOdobravanjaPopusta then BrojPrimeraka else 0 end),
	sum(case when Datum>=DatumOdobravanjaPopusta then BrojPrimeraka else 0 end),
	sum(case when Datum<DatumOdobravanjaPopusta then BrojPrimeraka*Cena else BrojPrimeraka*Cena*(1-SajamskiPopust) end),
	sum(case when Datum<DatumOdobravanjaPopusta then 0 else BrojPrimeraka*Cena*SajamskiPopust end),
	sum(SajamskiPopust)/count(SajamskiPopust)
from
	PRODUKCIJSKA_KUCA join ALBUM using(SifProdukcije) JOIN MUZICKI_Pravac using(SifPravca) join DNEVNA_PRODAJA using(SifAlbuma)
group by
	PRODUKCIJSKA_KUCA.Naziv,NazivPravca

8. zadatak